package com.hspedu.homework;

import java.util.*;

/**
 * @Author Stringzhua
 * @Date 2024/3/14 15:40
 * description:创建 DAO 类的对象，分别调用其 save、get、update、list、delete 方法来操作 User 对象使用 Junit 单元测试类进行测试。
 * 定义个泛型类 DAO<T>，在其中定义一个Map 成员变量，Map 的键为 String 类型，值为 T 类型。
 * 分别创建以下方法:
 * * (1)public void save(String id,T entity): 保存T类型的对象到 Map 成员变量中
 * * (2)public T get(String id): 从 map 中获取 id 对应的对象
 * * (3)public void update(String id,T entity):替换 map 中key为id的内容,改为 entity 对象
 * * (4)public List<T> list():返回 map 中存放的所有 T 对象
 * * (5)public void delete(String id): 删除指定 id 对象
 */
public class Dao<T> {
    private Map<String, T> map = new HashMap<>();

    public T get(String id) {
        return map.get(id);
    }

    public void update(String id, T entity) {
        map.put(id, entity);
    }

    //返回 map 中存放的所有 T 对象
    //遍历map,将map的所有value(T entity),封装到ArrayList返回即可
    public List<T> list() {
        //创建ArrayList
        List<T> list = new ArrayList<>();
        //遍历map
        Set<String> keySet = map.keySet();
        for (Object key : keySet) {
            //map.get(key)返回的就是User对象-->ArrayList
            list.add(map.get(key));//也可以直接使用本类的get(key)方法
        }
        return list;
    }

    //删除方法
    public void delete(String id) {
        map.remove(id);
    }

    //保存方法
    //保存T类型的对象到 Map 成员变量中
    public void save(String id, T entity) {
        map.put(id, entity);
    }
}
